package com.sjms._04_创建_原型模式;

/**
 * 原型模式(Prototype)-深拷贝
 * <p>
 * 深拷贝基本介绍
 * 1)复制对象的所有基本数据类型的成员变量值
 * 2)为所有引用数据类型的成员变量申请存储空间，并复制每个引用数据类型成员变量所引用的对象，直到该对象可达的所有对象。也就是说，对象进行深拷贝要对整个对象进行拷贝
 * 3)深拷贝实现方式
 * 1：重写clone方法来实现深拷贝
 * 2：通过对象序列化实现深拷贝(推荐)
 */
public class _Test_深_clone {

    public static void main(String[] args) throws CloneNotSupportedException {

        //
        Yang_深_clone yang = new Yang_深_clone("001", 1);
        Yang_深_clone clone_yang = (Yang_深_clone) yang.clone();
        System.out.println("原始羊-地址：" + yang);
        System.out.println("克隆羊-地址：" + clone_yang);
        System.out.println();

        //
        System.out.println("原始羊-姓名：" + yang.name);
        System.out.println("克隆羊-姓名：" + clone_yang.name);
        System.out.println();
        System.out.println("修改原始羊姓名为：小明");
        yang.setName("小明");
        System.out.println();
        //
        System.out.println("原始羊-姓名：" + yang.name);
        System.out.println("克隆羊-姓名：" + clone_yang.name);
        System.out.println();

        //
        System.out.println("原始羊-数组内容：" + yang.list);
        System.out.println("克隆羊-数组内容：" + clone_yang.list);
        System.out.println();

        //
        System.out.println("原始羊数组添加内容 MMM ");
        yang.add();
        System.out.println();

        //
        System.out.println("原始羊-数组内容：" + yang.list);
        System.out.println("克隆羊-数组内容：" + clone_yang.list);
        System.out.println();

    }

}
